package modelo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import conexionBD.Conexion;

public class JugadorDao implements Dao{
	

    public JugadorDao(){
	    Conexion.establecerPropiedadesConexion(driver, url, nombreBD, usuario, password);	
	}
    
    public Jugador peorJugadorNivel(Nivel nivel) throws Exception{
    	String tiraSQL= "SELECT codigo_jugador,nombre,tiempo,equivocaciones,puntaje from \"JUGADOR\" WHERE codigo_nivel=" + nivel.getCodigo() +
    	                " and puntaje=(SELECT max(puntaje) from \"JUGADOR\" where codigo_nivel="+ nivel.getCodigo() + ")";
        
    	
    	ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
    	
    	Jugador jugador= null;
    	
		if (rs.next()){
			jugador= new Jugador(rs.getInt("codigo_jugador"),rs.getString("nombre"),nivel,rs.getString("tiempo"),rs.getInt("equivocaciones"),rs.getInt("puntaje"));
		}
		
		return jugador;
    	
    }
    
    public List<Jugador> getMejoresJugadores(Nivel nivel) throws Exception{
		List<Jugador> lista= new ArrayList<Jugador>();
		
		String tiraSQL= "SELECT codigo_jugador,nombre,tiempo,equivocaciones,puntaje from \"JUGADOR\" WHERE codigo_nivel=" + nivel.getCodigo();
		
		ResultSet rs= Conexion.ejecutarDQL(tiraSQL);
		
		while (rs.next()){
			lista.add(new Jugador(rs.getInt("codigo_jugador"),rs.getString("nombre"),nivel,rs.getString("tiempo"),rs.getInt("equivocaciones"),rs.getInt("puntaje")));
		}
		
		return lista;
	}
    
    public boolean actualizarJugador(Jugador jugador) throws Exception{
    	
    	
    	String tiraSQL= "UPDATE \"JUGADOR\" set nombre='"+ jugador.getNombre() +"',tiempo='" + jugador.getTiempo() + "',equivocaciones="+ jugador.getEquivocaciones() + 
    	                "," + "puntaje=" + jugador.getPuntaje() + " WHERE codigo_jugador=" + jugador.getCodigo();
    	
    	
    	return Conexion.ejecutarDML(tiraSQL);
    }
    
    public boolean eliminarJugador(Jugador jugador) throws Exception{
    	String tiraSQL= "DELETE FROM \"JUGADOR\" WHERE codigo_jugador=" + jugador.getCodigo();
         
    	
        return Conexion.ejecutarDML(tiraSQL);
    }
    
    public boolean insertarJugador(Jugador jugador) throws Exception{
    	String tiraSQL= "INSERT INTO \"JUGADOR\"(nombre,tiempo,equivocaciones,codigo_nivel,puntaje) values('" + jugador.getNombre() + 
        "','" + jugador.getTiempo() + "'," + jugador.getEquivocaciones() + "," + jugador.getNivel().getCodigo() + "," + jugador.getPuntaje() + ")";
    	
    	return Conexion.ejecutarDML(tiraSQL);
    }
    
    public List<Jugador> consultarJugador(){
		List<Jugador> jugadores = new ArrayList<Jugador>();
		String tiraSQL = "SELECT * FROM \"JUGADOR\" ORDER BY codigo_nivel ASC, puntaje ASC";	
		try {
			ResultSet resultSet = Conexion.ejecutarDQL(tiraSQL);				
			while (resultSet.next()) {
				String nombre = resultSet.getString("nombre");
				
				Nivel nivel = new NivelDao().getNivel(resultSet.getInt("codigo_nivel"));
				String tiempo = resultSet.getString("tiempo");
				int equivocaciones = resultSet.getInt("equivocaciones");
				int puntaje = resultSet.getInt("puntaje");
				
				
				Jugador jugador = new Jugador(nombre, nivel, tiempo, equivocaciones, puntaje);
				jugadores.add(jugador);
			}
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
		catch (Exception ex){
			ex.printStackTrace();
		}
		
		return jugadores;
	}
    

}
